package com.itheima.springboot_reggie.web;
import com.itheima.springboot_reggie.common.R;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.UUID;
/**
 * 作为管理员把菜品noon弄好后拍照片上传到自己的电脑上面，比如上传到 E盘（创建一个文件夹myImg :/img）,
 * 现在把自己电脑上的图片上传到服务器上的外卖项目上，未来服务器需要一个盘服存储这个照片比如存到d盘：imgs
 * 照片传上来之后需要回写下，
 *
 *    例如把 a.jpg 图片上传到服务器上保存随机生成另外一个名称叫 b.jpg ，因为为了防止未来名字一样起冲突，给覆盖改了
 *    之后将b.gpg这个图片名称再返回给ajax，ajax拿到图片后会又发一次请求，这次请求是下载，
 *    img标签发起下载图片的请求
 */

/**
 *   目前这个处理器类 就是做 图片的上传和下载的
 */
@RestController
@RequestMapping("/common")   //请求前缀/地址，看接口文档
public class CommonController {

    /**       图片上传接口
     *  看接口文档中的请求方式是post，common是前缀，请求路径是upload
     *  请求参数：二进制文件（MultipartFile file） name= file
     *  响应结果【格式统一】：R 对象
     */
    @PostMapping("/upload") //请求路径
    public R uploadImg(MultipartFile file) throws IOException {
        /**
         *  springMvc提供的文件上传的功能：其中为我们提供了一个Api：MultipartFile
         *  我们当前的图片信息就封装到了这个MultipartFile对象中
         *    接下来的操作：
         *       1.获取图片名称（主要为了图片的后缀名成：xxx.img）
         *       2.生成随机的土拍你名称，使用UUID生成
         *       3.使用/借助 MultipartFile对象提供的方法，将其内部的图片资源直接存到本地磁盘
         */


        //1.获取图片名称（主要为了图片的后缀名成：xxx.img） getOriginalFilename:获取初始的文件名称
        String originalFilename = file.getOriginalFilename();//xxx.jpg
         //图片名称拿到了，但是我们要的是图片名称的后缀(imgSuffix)，需要截取,字符串的截取  .jpg
        String imgSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));//这要写包括“.”，括号里添加，10的位置就不包括
       //2.使用UUID工具类生成随机的图片名称
        String imgRandomName = UUID.randomUUID().toString();
        //新的图片名称= 随机图片名称+图片名后缀
        String imgName= imgSuffix+imgRandomName; //xxx.jpg
        //3.使用/借助 MultipartFile对象提供的方法，将其内部的图片资源直接存到本地磁盘
       file.transferTo(new File("e://myImg//"+imgName));//把图片imgName放到s盘的myImg文件夹里
        return R.success("imgName");  //返回的是图片名称

    }
    /**  图片下载
     *  接口二：图片文件下载接口：
     *   请求url地址：/common/download  ?name=81876c51-1e34-45ad-8dfb-ba80fb1a3d67.jpg
     *   请求方式：GET
     *   请求参数： ?name=81876c51-1e34-45ad-8dfb-ba80fb1a3d67.jpg    参数 ：k=v形式
     *   响应结果：二进制数据【图片内容】 reponse.getWriter()  reponse.getOutputStream();
     */
    @GetMapping("/download")
    public void downloadImg(String name,HttpServletResponse response) throws IOException {
        //这个name就是当前图片下载的名称
        //响应结果是一张图片数据，直接使用response封装图片数据到响应体中即可，因此当前方法返回值设置成void
        //直接用response去响应，在（）里加上要啥框架会给我们提供啥

        //将服务器指定盘符中的图片数据，写入到响应体中
        //选择 IOUtils org.apache.tomcat.util.http.fileupload
        //当前图片在  //e://myImg//+name （因为就差一个名称了，所以把name加上）
        IOUtils.copy(new FileInputStream("//e://myImg//"+name), response.getOutputStream());
        //ctrl+P，第一个要输入流（即图片文件，把路径地址放进去），第二个要的是一个输出流

    }
}
